~ 藍圖決定了發展 ~
code github: https://github.com/slindevel/modern-aws-marathon
我們今天來一步一步建置整個環境所需要的資源配置,使用 cloudformation
幾乎不論何種資源服務部署至 AWS 都需要配置 VPC 讓我們得以控制其網路存取環境,這次我們也不例外,我們建立一個傳統配置的 VPC,可以存取網際網路,也有私有子網隱藏我們的服務:(相關程式碼:Day25/vpc.yaml)
這個配置幾乎可以算是一個新系統的標準配置了,注意其中的 NAT, EIP 是要收費的
詳細說明可以參考 Day 5 - 建立 VPC 的說明
配置 S3 Bucket,使用指令 aws s3 mb s3://<algo-bucket-name>
在之後的 cloudformation 中會加入以下 code 來參照到這個 S3 bucket
Parameters:
S3Bucket:
Description: Please specify your S3 bucket
Type: String
Default: <algo-bucket-name>
ECR:
Type: AWS::ECR::Repository
Properties:
RepositoryName: !Sub ${EnvironmentName}_ecr
AlgorithmicTradingInstance:
Type: AWS::SageMaker::NotebookInstance
Properties:
InstanceType: ml.t2.large
DefaultCodeRepository: https://github.com/aws-samples/algorithmic-trading
RoleArn: !GetAtt 'SageMakerExecutionRole.Arn'
SageMakerExecutionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- sagemaker.amazonaws.com
Action:
- sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
- arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess
- arn:aws:iam::aws:policy/AmazonAthenaFullAccess
- arn:aws:iam::aws:policy/AWSCloudFormationReadOnlyAccess
- arn:aws:iam::aws:policy/AmazonECS_FullAccess
- arn:aws:iam::aws:policy/AmazonKinesisReadOnlyAccess
- !Ref 'S3Policy'
其中 S3Policy內容如下:
S3Policy:
Type: AWS::IAM::ManagedPolicy
Properties:
Description: S3 Permission
Path: /
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- s3:GetObject
- s3:PutObject
- s3:DeleteObject
- s3:ListBucket
Resource:
- !Sub
- arn:aws:s3:::${S3Bucket}/*
- S3Bucket: !Ref 'S3Bucket'
在配置之前請先依照 Day 17 所述,把 AWS Data Exchange 的資料倒到 S3Bucket 跟目錄下面
這個 glue.yaml 配置了以下項目(採用 ChatGPT 的解釋)
- GlueDatabase: 創建了一個 AWS Glue 數據庫,名稱為 "algo_data",用於存儲數據表。
- GlueHistDataDaily 和 GlueHistDataIntraday: 這些資源是 AWS Glue 表,用於描述每日價格數據和分鐘價格數據的結構。它們定義了數據的格式、位置以及相關的配置。
- AthenaWorkgroup: 創建了一個 Athena 工作組,名稱為 "MyWorkGroup",用於運行 Athena 查詢。這個工作組允許啟用 Requester Pays 功能,並定義了查詢結果的輸出位置。
- AlgoHistDataDaily 和 AlgoHistDataIntraday: 這些資源是 Athena 命名查詢,用於定義要在 Athena 中運行的 SQL 查詢。這些查詢可以用於查詢先前定義的 Glue 表中的數據。
- GlueTableFeedDB: 創建了一個 AWS Glue 表,用於描述德國波爾瑟交易所(Deutsche Boerse Xetra)的市場數據的結構。這個表還定義了分區鍵,允許根據日期對數據進行分區。
大功告成,最主要的設定是以 SageMaker 為核心,資料存於 S3,透過 Glue & Athena 存取資料,架構在傳統 VPC 架構上的概念寫成的,另外還有 ECS 的配置,如果我們選擇在 SageMaker 裡面 local 端訓練模型,則不需要配置 ECS 資源就可以建立我們的模型,而 ECS 服務則是等到要上線部署的時候會需要,到時我們再一並設定囉
https://github.com/aws-samples/algorithmic-trading
https://aws.amazon.com/tw/blogs/industries/algorithmic-trading-on-aws-with-amazon-sagemaker-and-aws-data-exchange/
https://chat.openai.com/